<?php

$email = '123@11.com';
$flag = false;
if (false !== strpos($email, '@')) {
    $flag = false;
};

// 获取某特点字符的前几位
/************ 1.2 替换字符串的除后四位 如性用卡  ***************/

$string = 'hello@.com@';

$sub = substr($string, 0, strpos($string, '@'));

$sub1 = substr($string, -3, -2);  // 找到位置 倒数第三为 ， 然后倒数 2位结束  结果为 c


/************ 1.3 替换字符串的除后四位 如性用卡  ***************/

$card = 1248697245013306;

$cardNumber = substr_replace($card, '****', 0, strlen($card) - 4);//"****3306"
// 隐藏后4位
$cardNumber1 = substr_replace($card, '****', -4);//"124869724501****"

// 还可插入
$cardNumber1 = substr_replace($card, 'dana:', 0, 0);//"dana:1248697245013306"

/*** 1.4 逐字节处理字符 ***/

# 问题 需要分别处理字符中各个字节

# 可用 for 循环处理 如统计一个字符串中的元音字母的个数

$string = "this weekend ,I'm going shopping for a pet chicken";
$len = strlen($string);
$vo = 0;
for ($i = 0; $i < $len; $i++) {
    if (strstr('aeiouAEIOU', 'i')) {
        $vo++;
    }
}

function lookAndSay($s)
{
    // 初始化返回值
    $r = '';
    // $m 包含要统计的字符， 初始化为字符串中的第一个字符
    $m = $s[0];
    // $n 是 已经查看过的 $m 个数，初始化为 1
    $n = 1;
    $len = strlen($s);
    for ($i = 1; $i < $len; $i++) {
        // 如果这个字符与上一个相同
        if ($s[$i] == $m) {
            // 将这个字符的个数增 1
            $n++;
        } else {
            // 否则，将字符个数和字符本身增加到返回值
            $r .= $n . $m;
            // 将要查找的字符设置为当前字符
            $m = $s[$i];
            // 并将字符个数设置为 1
            $n = 1;
        }
    }

    // 然后构建的字符串以及最后的字符个数及字符
    return $r . ':' . $n . ':' . $m;

}

for ($i = 0, $s = 1; $i < 10; $i++) {
    // $s = lookAndSay($s);
    //  print "$s\n";
}

/************ 1.5 按单词或字节反转字符串  ***************/

$rev = "this is not a palindrome";

$revByB = strrev($rev); //"emordnilap a ton si siht"

// 按单词反转 需要根据单词的边界分解单词 然后反转 之后组装

$worlds = explode(' ', $rev);
$revArr = array_reverse($worlds);
$revArr = implode(' ', $revArr); //palindrome a not is this

// 也可以
$revArrs = implode(' ', array_reverse(explode(' ', $rev)));

/************ 1.6 随机生成字符串  ***************/

$randString = 'abcdefghijklmnopqrstyvwxyz0123456789~!@#$%^&*()_+';

function generalString($randString, $length = 6)
{
    $randstr = '';
    $len = strlen($randString);
    var_dump($len);
    for ($i = 0; $i < $length; $i++) {
        $randstr .= $randString[mt_rand(0, $len)];
    }
    return $randstr;
}

//$result = generalString($randString);//7#n6%j


/************ 1.7 扩展和压缩制表符  ***************/


// 将字符串中的空格改为制表符，但依然保证文本按制表符对齐。
// 如希望 每 8 个字符一个制表符，假设一行开头有 5个字母和一个制表符，
// 那么这个制表符替换为 3个空格

function tab_expand($text)
{
    while (strstr($text, "\t")) {
        $text = preg_replace_callback('/^([^\t\n]*)(\t+)/m', 'tab_expand_helper', $text);
    }
    return $text;
}

function tab_expand_helper($matches)
{
    $tab_stop = 8;
    return $matches[1] .
        str_replace(' ', strlen($matches[2]) *
            $tab_stop - (strlen($matches[1] % $tab_stop)));

}

$text = '';



$result = tab_expand($text);

var_dump($result);